package definite.Guide.Book.Chap01_02;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;

public class PropertyChangeSample {

	public static void main(String[] args) {
		Runnable runner = new Runnable() {

			@Override
			public void run() {
				JFrame frame = new JFrame("Bound Sample");
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				final JButton button1 = new JButton("Select Me");
				final JButton button2 = new JButton("No Select Me");
				final Random random = new Random();

				ActionListener actionListener = new ActionListener() {

					@Override
					public void actionPerformed(ActionEvent e) {
						JButton button = (JButton) e.getSource();
						int red = random.nextInt(255);
						int green = random.nextInt(255);
						int blue = random.nextInt(255);
						button.setBackground(new Color(red, green, blue));
					}
				};

				PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {

					@Override
					public void propertyChange(PropertyChangeEvent evt) {
						String property = evt.getPropertyName();
						if ("background".equals(property))
							button2.setBackground((Color) evt.getNewValue());
					}
				}; // end of pro change

				button1.addActionListener(actionListener);
				button1.addPropertyChangeListener(propertyChangeListener);
				button2.addActionListener(actionListener);

				frame.add(button1, BorderLayout.NORTH);
				frame.add(button2, BorderLayout.SOUTH);
				frame.setSize(300, 400);
				frame.setVisible(true);
			} // end run

		};// end runable

		EventQueue.invokeLater(runner);
	}
}
